﻿#include "StdAfx.h"
#include "sdl_sub.h"
sdl_sub::sdl_sub()
{
	this->height = 0; //윈도우 세로
	this->width = 0; //윈도우 가로
	this->bit = 0;  //스크린 비트
	this->title = "test_sdl"; //윈도우 이름
	this->screen = NULL; //기본 스크린
	this->flag_init = false; //sdl 초기화 
}

sdl_sub::~sdl_sub(void)
{
	//초기화에 성공하여 종료되는 경우 --항상 그런 경우일듯 싶지만.
	if(this->flag_init == true)
		SDL_Quit();
}
float sdl_sub::check_fps(int frame_rate)
{
	//경과시간 읽어오기
	int elapsedTicks = this->sub_time.get_ticks();

	//목표보다 빠르면 지연
	if(1000 > (frame_rate * elapsedTicks))
	{
		int delay = 1000 / frame_rate - elapsedTicks;
		SDL_Delay(delay);
	}
	elapsedTicks =  this->sub_time.get_ticks();
	//fps 계산
	float fps = (float)1000/ elapsedTicks;

	this->sub_time.start();
	return fps;
}
int sdl_sub::checkEvent(){
	return SDL_PollEvent(&event);
}
bool sdl_sub::check_quit(){
	bool quit = false;
	if(event.type == SDL_QUIT)
		quit = true;
	else if(event.type == SDL_KEYDOWN)
		if(event.key.keysym.sym == SDLK_ESCAPE)
			quit = true;
	return quit;
}
int sdl_sub::check_arrowkey()
{
	int direction = 0;
	if(event.key.state == SDL_PRESSED)
		switch(event.key.keysym.sym){
			case SDLK_UP: direction =1; break;
			case SDLK_DOWN: direction =2; break;
			case SDLK_LEFT: direction =3; break;
			case SDLK_RIGHT: direction =4; break;
		}
	else
		switch(event.key.keysym.sym){
			case SDLK_UP: direction =5; break;
			case SDLK_DOWN: direction =6; break;
			case SDLK_LEFT: direction =7; break;
			case SDLK_RIGHT: direction =8; break;
		}
	return direction;
}
bool sdl_sub::init(std::string title, int width, int height,int bit)
{
	// Start SDL
	if(SDL_Init( SDL_INIT_EVERYTHING ) == -1)
		return e_msg("SDL 초기화 실패:",SDL_GetError());

	this->height = height; //윈도우 세로
	this->width = width; //윈도우 가로
	this->bit = bit;  //스크린 비트
	this->title = title; //윈도우 이름

	// 비디오 모드 초기화!
	this->screen = SDL_SetVideoMode(width, height, bit, SDL_SWSURFACE);
	if(screen == NULL) 
		return e_msg("Video 초기화 실패:",SDL_GetError());

	//Set the window caption 
	//아이콘 관련 코드 추가 필요함 두번째 인자
	SDL_WM_SetCaption(title.c_str(), NULL);

	//타이머 시작
	this->sub_time.start();

	//초기화 성공 플래그
	return this->flag_init = true;
}

bool sdl_sub::e_msg(std::string msg, std::string error_code)
{
	std::cout<<msg<<" : "<<error_code<<"endl";
	exit(0);
	return false;
}
int sdl_sub::set(image * input_img)
{
	SDL_Rect xy = input_img->xy;
	SDL_Rect offset = input_img->offset;

	return SDL_UpperBlit(input_img->src,&offset,this->screen,&xy); 

}
void sdl_sub::delay(int time){
	SDL_Delay(time);
}
bool sdl_sub::view()
{
	if(SDL_Flip(this->screen) == -1) 
		return e_msg("view 실패:",SDL_GetError());
	else
		return true;
}
